Skip to main content

Azure Kubernetes Fleet Manager

Azure Kubernetes Fleet Manager is a service designed to provide unified management and orchestration for multiple Azure Kubernetes Service (AKS) clusters. It simplifies operations in multi-cluster environments and enables consistent configuration management and update strategies.

What is Fleet Manager​

Fleet Manager groups multiple AKS clusters into a "fleet" and provides the following capabilities:

  • Unified Management: Manage multiple clusters from a single control plane
  • Multi-cluster Kubernetes Resource Propagation: Efficiently deploy Kubernetes resources across multiple clusters
  • Staged Rollouts: Apply changes across clusters in stages
  • Unified Update Strategy: Manage Kubernetes version and configuration updates collectively

Key Components​

1. Fleet Resource​

A Fleet is a logical container that groups multiple AKS clusters together.

apiVersion: containerservice.azure.com/v1
kind: Fleet
metadata:
name: production-fleet
spec:
hubProfile:
dnsPrefix: production-fleet-hub

2. Member Cluster​

Individual AKS clusters that join a Fleet are called member clusters.

# Join a cluster to the Fleet
az fleet member create \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name cluster-east \
--member-cluster-id /subscriptions/.../clusters/aks-east

3. Hub Cluster​

Fleet Manager optionally uses a Hub Cluster to provide unified management through the Kubernetes API.

Kubernetes Resource Propagation​

Fleet Manager enables efficient deployment of Kubernetes resources across multiple clusters.

ClusterResourcePlacement​

ClusterResourcePlacement defines which resources to deploy to which clusters.

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: deploy-frontend
spec:
resourceSelectors:
- group: ""
version: v1
kind: Namespace
name: frontend
- group: apps
version: v1
kind: Deployment
labelSelector:
matchLabels:
app: frontend
policy:
placementType: PickAll

Placement Policies​

PickAll​

Deploys resources to all member clusters.

policy:
placementType: PickAll

PickN​

Deploys to a specified number of clusters.

policy:
placementType: PickN
numberOfClusters: 3

PickFixed​

Deploys to specific named clusters.

policy:
placementType: PickFixed
clusterNames:
- cluster-east
- cluster-west

Cluster Selector​

Select clusters based on labels.

policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
region: japan

Staged Rollouts (Update Strategy)​

Fleet Manager provides powerful capabilities for applying changes in stages.

Update Run​

Use Update Run to execute cluster updates in stages.

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: k8s-upgrade-1-28
spec:
updateStrategyId: production-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5

Update Strategy​

Define update strategies to control the sequence and timing of rollouts.

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateStrategy
metadata:
name: production-strategy
spec:
stages:
- name: dev-stage
groups:
- name: dev-clusters
afterStageWaitInSeconds: 3600
- name: prod-stage
groups:
- name: prod-east-clusters
- name: prod-west-clusters
afterStageWaitInSeconds: 7200

Stages and Groups​

  • Stage: Sequential update phases
  • Group: Sets of clusters updated simultaneously
  • Wait Period: Waiting time between stages

Use Cases​

1. Multi-Region Deployment​

Deploy applications spanning multiple regions at once.

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: global-app-deployment
spec:
resourceSelectors:
- group: apps
version: v1
kind: Deployment
name: my-app
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchExpressions:
- key: region
operator: In
values:
- japaneast
- japanwest
- eastus

2. Environment-based Cluster Management​

Efficiently manage development, staging, and production clusters.

# Development Fleet
az fleet create \
--resource-group dev-rg \
--name dev-fleet \
--location japaneast

# Production Fleet
az fleet create \
--resource-group prod-rg \
--name prod-fleet \
--location japaneast \
--enable-hub

3. Kubernetes Version Upgrades​

Upgrade Kubernetes versions across all clusters in stages.

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: upgrade-to-1-29
spec:
updateStrategyId: safe-upgrade-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.29.0
nodeImageSelection:
type: Latest

Best Practices​

1. Appropriate Grouping​

Logically group clusters and leverage labels.

# Apply labels to clusters
az aks update \
--resource-group myResourceGroup \
--name aks-cluster \
--tags environment=production region=japaneast tier=frontend

2. Implement Staged Rollouts​

Always apply production changes in stages.

stages:
- name: canary
groups:
- name: canary-cluster
- name: production
groups:
- name: prod-clusters
afterStageWaitInSeconds: 86400 # Wait 24 hours

3. Monitoring and Observability​

Monitor update success/failure at each stage.

# Check Update Run status
az fleet updaterun show \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name upgrade-run-1

4. Rollback Strategy​

Define rollback procedures in advance for when issues occur.

apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: rollback-to-1-28
spec:
updateStrategyId: emergency-rollback
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5

5. Validate Resource Propagation​

Verify resource placement before deployment.

# Check ClusterResourcePlacement status
kubectl get clusterresourceplacement deploy-frontend -o yaml

Fleet Manager and GitOps Integration​

Fleet Manager can be combined with GitOps tools (FluxCD, Argo CD).

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: fleet-config
namespace: flux-system
spec:
interval: 1m
url: https://github.com/myorg/fleet-config
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: fleet-placements
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: fleet-config
path: ./placements
prune: true

Limitations​

  • Maximum of 100 member clusters per Fleet
  • Hub Cluster is deployed in a single region
  • Cross-cluster network communication is not automatically configured
  • Some Kubernetes resource types may not be propagatable

Summary​

Azure Kubernetes Fleet Manager significantly simplifies multi-cluster environment management. Features like unified management, multi-cluster deployments, and staged rollouts enable enterprise-grade Kubernetes operations.

By applying appropriate strategies and best practices, you can build scalable and reliable multi-cluster environments.

References​